﻿//
// Created by xiaoliu on 2024/12/14.
//

#ifndef CERTIFICATETOOL_CERTIFICATETOOL_H
#define CERTIFICATETOOL_CERTIFICATETOOL_H

#include <QWidget>
extern "C"
{
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/x509.h>
#include <openssl/evp.h>
#include <openssl/x509v3.h>
}

namespace Ui
{
    class CertificateTool;
}


class CCertificateTool : public QWidget
{
    Q_OBJECT
public:
    CCertificateTool(QWidget* parent = nullptr);
    ~CCertificateTool();

private slots:
    // 生成CA证书
    void on_btnMakeCACert_clicked();
    // 生成请求文件
    void on_btnMakeUserCSR_clicked();
    // 根据用户提供的CSR文件，CA证书，CA证书对应的私钥为用户颁发证书
    void on_btnSign_clicked();
    // 验证是否是本CA签发的证书
    void on_btnVerify_clicked();
    // 选择文件
    void on_btnCACert_clicked();
    void on_btnCAPrivate_clicked();
    void on_btnUserCSR_clicked();
    void on_btnCACert0_clicked();
    void on_btnUserCert_clicked();


private:
    // 选择文件
    QString selectFile();
    RSA* generateRsaKeypair();
    void writeKeyToFile(const char* pPublicKeyPath, const char* pPrivateKeyPath, RSA *rsa);
    QString getMotherboardSerialNumber();

private:
    Ui::CertificateTool* m_ui;
};


#endif //CERTIFICATETOOL_CERTIFICATETOOL_H
